package org.example.study2;

// 通过共享标记实现线程中断
public class Demo_206 {
    // 声明静态volatile布尔变量作为共享终止标志
    // volatile确保多线程间的可见性（主线程修改后子线程立即可见）
    // static 确保主线程和子线程访问的是同一个内存地址的变量
    public volatile static boolean isQuit = false;

    public static void main(String[] args) throws InterruptedException {
        // 创建线程对象（Lambda实现Runnable接口）
        Thread thread = new Thread(() -> {
            // 循环检测标志位
            while (!isQuit) {
                System.out.println(Thread.currentThread().getName()
                        + ": 转账处理中...");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            // 线程退出
            System.out.println(Thread.currentThread().getName()
                    + ": 已终止转账！");
        },"张三");

        System.out.println("主线程: 启动张三转账");
        thread.start();// 启动子线程
        Thread.sleep(5000);// 主线程休眠5秒
        // 主线程发出紧急通知
        System.out.println("主线程: 紧急通知！对方是骗子，停止转账！");
        isQuit = true;// 修改共享标志位（通知子线程终止）
    }
}

/*
输出：
主线程: 启动张三转账
张三: 转账处理中...
张三: 转账处理中...
张三: 转账处理中...
张三: 转账处理中...
张三: 转账处理中...
主线程: 紧急通知！对方是骗子，停止转账！
张三: 已终止转账！
*/
